# 实现一个命令行版本的学生管理系统
import os.path
import sys

# 使用这个全局变量，来管理所有学生的信息
# 这个列表的每个元素都是一个字典，每个字典都是一个学生
students = []


def save():
    """
    用于存档
    """
    # 此处的路径不是以 d: 开头的“绝对路径”，而是相对路径，
    # 此时这个写法的含义就是让 record.txt 和 当前的code01.py 在同一个目录里
    with open('record.txt','w',encoding='utf8') as f:
        for s in students:
            f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
        print(f'[存档成功] 共存储了{len(students)}条记录！')


def load():
    """
    用于读档
    """
    # 如果读档文件不存在，则直接跳过读档流程
    # 为了避免读方式打开文件的时候，文件不存在引起异常
    if not os.path.exists('record.txt'):
        return

    # 读档的时候要保证先把旧的数据给清理干净
    global students
    students = []
    with open('record.txt','r',encoding='utf8') as f:
        for line in f:
            # 针对这一行数据，按照 \t 进行切分操作！
            # 切分之前，要去除末尾的换行
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'当前行格式存在问题！line = {line}')
                continue
            student = {
                'studentId':tokens[0],
                'name':tokens[1],
                'gender':tokens[2],
                'className':tokens[3]
            }
            students.append(student)
    print(f'[读档成功] 共读取了{len(students)}条记录！')
def insert():
    #     新增学生
    print('[新增学生] 开始！')
    studentId = input('请输入学生的学号:')
    name = input('请输入学生的姓名:')
    gender = input('请输入学生的性别:')
    if gender not in('男','女'):
        print("性别输入错误，新增学生失败！")
        return
    className = input('请输入学生的班级:')
#     使用字典把以上信息聚合起来
    student = {
        'studentId':studentId,
        'name':name,
        'gender':gender,
        'className':className
    }
    global students
    students.append(student)
    # 增加保存操作
    save()
    print('[新增学生] 完毕！')


def show():
    # 遍历全局变量这个列表，把每个学生的信息打印出来
    print('[显示学生] 开始！')
    for s in students:
        print(f'[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}')
    print(f'[显示学生] 完毕！共显示了{len(students)}条数据')

def find():
    # 根据学生姓名进行查找
    count = 0
    print('[查找学生] 开始！')
    name = input('请输入要查找的学生姓名:')
    for s in students :
        if name == s['name']:
            print(f'[{s['studentId']}]\t{s['name']}\t{s['gender']}\t{s['className']}')
            count += 1
    print(f'[查找学生] 完毕！共找到了{count}个匹配的同学！')
def delete():
    print('[删除学生] 开始！')
    studentId = input('请输入要删除的学生的学号:')
    for s in students:
        if studentId == s['studentId']:
            print(f'删除{s['name']}同学的信息！')
            students.remove(s)
    save()
    print('[删除学生] 完毕！')

def menu():
    print("1.新增学生")
    print("2.显示学生")
    print("3.查找学生")
    print("4.删除学生")
    print("0.退出程序")
    choice = input("请输入你的选择:")
    return choice

def main():
    '''
    函数入口
    :return:
    '''
#     通过控制台和用户交互
    print('+-----------------------------+')
    print('|         学生管理系统          |')
    print('+-----------------------------+')
    # 在程序启动的时候调用 load
    load()
    while(True):
        choice = menu()
        if choice == '1':
            # 新增学生
            insert()
        elif choice== '2':
            # 显示学生
            show()
        elif choice == '3':
            # 查找学生
            find()
        elif choice == '4':
            # 删除学生
            delete()
        elif choice == '0':
            # 退出程序
            print('goodbye')
            sys.exit(0)


main()